package com.haojin.java;

import org.junit.Test;

import java.io.*;
import java.util.Locale;

/**
 * @author .29.
 * @create 2022-04-15 19:28
 */
/*
其他流的使用
1.标准的输入输出流
2.打印流
3.数据流
 */
public class OtherStreamTest {
    /*
    1。标准的输入输出流
    1.1
    System.in:标准的输入流，默认从键盘输入
    System.out:标准的输出路，默认从控制台输出
    1.2
    System类的setIn(InputStream is)/setOut(PrintStream ps)方式重新指定输入和输出的位置
    1.3练习：
    从键盘输入字符串，要求将读取到的整行字符串转换成大写输出，然后继续进行输入操作，
    直至当输入“e”或者“exit”时，退出程序

    方法一：使用Scanner实现，调用next()方法
    方法二：使用System.in实现。System.in --> 转换流BufferedReader的readLine()

    2.打印流：PrintStream和PrintWriter
    2.1提供了一系列重载的print()和println()

    3.数据流
    3.1 DataInputStream和DataOutputStream
    3.2作用：用于读取或写出基本数据类型的变量或字符串
     */
    public static void main(String[] args) {
        BufferedReader br = null;
        try {
            InputStreamReader isr = new InputStreamReader(System.in);
            br = new BufferedReader(isr);
            while(true){
                System.out.println("请输入字符串：");
                String data = br.readLine();
                if("e".equalsIgnoreCase(data)||"exit".equalsIgnoreCase(data)){
                    System.out.println("程序结束");
                    break;
                }else{
                    String upperCase = data.toUpperCase(Locale.ROOT);
                    System.out.println(upperCase);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /*
    数据流的使用
    DataInputStream和DataOutputStream

    练习：将内存中的字符串、基本数据类型的变量写出到文件中
     */
    @Test
    public void test2(){
        DataOutputStream dos = null;
        try {
            dos = new DataOutputStream(new FileOutputStream("data.txt"));
            dos.writeUTF("小可爱");
            dos.flush();
            dos.writeInt(18);
            dos.flush();
            dos.writeBoolean(true);
            dos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (dos != null) {
                try {
                    dos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}
